/*
 * Copyright (c) 2016  西咸新区大数据信息技术服务有限公司版权所有.
 */
package priv.conceit.sc.hoxton.common.util;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 数据储存单位转换 保留至小数点后两位 四舍五入
 *
 * @author Conceit
 * 2017-08-21 添加方法 byteToMb
 * 2017-08-21 添加方法 byteToKb
 * 2017-08-21 添加方法 kbToMb
 * 2017-08-21 添加方法 kbToByte
 * @since 1.0.0, 2017/08/21
 */
public class StorageCapacityUtil {

	private static int DEFAULT_SCALE = 2;
	private static RoundingMode DEFAULT_SCALE_ROUNDING_MODE = RoundingMode.HALF_UP;

	/**
	 * 存储容量单位枚举
	 */
	public static enum StorageCapacityUnitEnum {
		B("byte", "字节"),
		KB("Kilobyte", "千字节"),
		MB("Megabyte", "兆字节"),
		GB("Gigabyte", "吉字节"),
		TB("Terabyte", "万亿字节"),
		PB("Petabyte", "千万亿字节"),
		EB("Exabyte", "百亿亿字节"),
		ZB("Zettabyte", "十万亿亿字节"),
		YB("Yottabyte", "一亿亿亿字节"),
		BB("Brontobyte", "一千亿亿亿字节"),
		NB("NonaByte", "一百万亿亿亿字节"),
		DB("DoggaByte", "十亿亿亿亿字节");

		private String key;
		private String value;

		StorageCapacityUnitEnum(String key, String value) {
			this.key = key;
			this.value = value;
		}

		public String getKey() {
			return key;
		}

		public String getValue() {
			return value;
		}
	}

	/**
	 * 转换
	 *
	 * @param inUnitEnum  源存储枚举
	 * @param outUnitEnum 转换前的存储枚举
	 * @param size        byte
	 * @return BigDecimal
	 */
	public static BigDecimal conver(StorageCapacityUnitEnum inUnitEnum, StorageCapacityUnitEnum outUnitEnum, Long size) {
		//数据合法性校验
		if (size == null || size == 0) {
			return BigDecimal.ZERO;
		}

		switch (outUnitEnum) {
			case B:
				return new BigDecimal(size / 1024.00 / 1024.00).setScale(DEFAULT_SCALE, DEFAULT_SCALE_ROUNDING_MODE);
			default:
				return BigDecimal.ZERO;
		}


	}

	/**
	 * 字节转换为kb(千字节)
	 *
	 * @param size byte
	 * @return float
	 */
	public static double byteToKb(Long size) {
		//数据合法性校验
		if (size == null || size == 0) {
			return 0;
		}
		return new BigDecimal(size / 1024.00).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
	}

	/**
	 * kb(千字节)转换为Mb(兆字节)
	 *
	 * @param size kb
	 * @return float
	 */
	public static float kbToMb(Long size) {
		//数据合法性校验
		if (size == null || size == 0) {
			return 0;
		}
		return new BigDecimal(size / 1024.00).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
	}

	/**
	 * kb(千字节)转换为Byte(字节)
	 *
	 * @param size kb
	 * @return float
	 */
	public static double kbToByte(Long size) {
		//数据合法性校验
		if (size == null || size == 0) {
			return 0;
		}
		return new BigDecimal(size * 1024.00).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
	}
}
